import axios from 'axios'
import QS from 'qs'
import router from '../router/index'
import { Message } from 'element-ui'

// 默认接口
axios.defaults.baseURL = 'http://61.181.255.77:17311'

// 请求超时时间10s
axios.defaults.timeout = 10 * 1000

// post请求头的设置
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'

// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 做点什么
    return config
  },
  error => {
    // 做点什么
    console.log(error)
    Promise.reject(error)
  }
)
// 响应拦截器
axios.interceptors.response.use(
  response => {
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    // 否则的话抛出错误
    if (response.status === 200) {
      const res = response.data
      if (parseInt(res.code) !== 0) {
        Message({
          showClose: true,
          message: res.message,
          type: 'error',
          duration: 3 * 1000
        })
        return Promise.reject(response)
      } else {
        const data = response.data
        return data
      }
    } else {
      return Promise.reject(response)
    }
  },
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        // 401: 未登录
        case 401:
          router.replace({
            path: '/login',
            query: {
              redirect: router.currentRoute.fullPath
            }
          })
          break

        // 403 token过期
        case 403:
          Message({
            showClose: true,
            message: '登录过期，请重新登录',
            type: 'error',
            duration: 3 * 1000
          })
          break

        // 404 请求不存在
        case 404:
          Message({
            showClose: true,
            message: '网络请求不存在',
            type: 'error',
            duration: 3 * 1000
          })
          break

        // 其他错误，直接抛出错误提示
        default:
          Message({
            showClose: true,
            message: '异常错误请联系管理员',
            type: 'error',
            duration: 3 * 1000
          })
      }
    }
    return Promise.reject(error)
  }
)

// export default axios

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: params
      })
      .then(response => {
        resolve(response)
      })
      .catch(error => {
        reject(error)
      })
  })
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, params) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, QS.stringify(params))
      .then(response => {
        resolve(response.data)
      })
      .catch(error => {
        reject(error.data)
      })
  })
}
